package com.itheima.tcpdemo3;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

public class ServiceDemo {

    public static void main(String[] args) {
        try(
                //1.创建一个服务器端Socket，即SocketServer，指定绑定的端口，并监听此端口
                ServerSocket serverSocket = new ServerSocket(8888);
                ) {
            System.out.println("服务端启动成功！");

            // 使用线程池
            ExecutorService pool = new ThreadPoolExecutor(
                    3, // 线程池中核心线程数
                    5, // 线程池中允许的最大线程数
                    60, // 线程空闲时间
                    TimeUnit.SECONDS, // 时间单位 秒
                    new ArrayBlockingQueue<Runnable>(3), // 队列
                    Executors.defaultThreadFactory(),
                    new ThreadPoolExecutor.AbortPolicy() // 拒绝策略 哪一个线程调用了submit方法，哪一个线程来执行
            );
            while (true) {
                //2.调用accept()方法开始监听，等待客户端的连接
                Socket socket = serverSocket.accept();

                //3. 创建一个新的线程来处理新的服务器端的请求
                pool.submit(new ServerReader(socket));

                System.out.println("一个客户端上线了");
                System.out.println("客户端的ip为：" + socket.getInetAddress());
                System.out.println("客户端的端口为：" + socket.getPort());
                System.out.println("------------------------------------------");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
